//showModel,只有确定的提示框
function showModal(content, options, callBack) {
  var defaultOptions = {
    title: '提示',
    content: content,
    showCancel: false,
    success: res => {
      callBack && callBack();
    }
  }
  var options = {
    ...defaultOptions,
    ...options
  }
  wx.showModal(options);
}

//toast
function showToast(title) {
  wx.showToast({
    title: title,
    icon: 'none',
    duration: 3000
  })
}

function showActionSheet(itemList, callBack) {
  wx.showActionSheet({
    itemList,
    success: res => {
      callBack && callBack(res);
    },
    fail: res => {
      var msg = res.errMsg;
      var value = msg.indexOf("cancel") != -1;
      if (!value) {
        showToast(msg);
      }
    }
  });
}

//showLoading
function showLoading(title) {
  wx.showLoading({
    title: title || '加载中...',
    mask: true
  }, 3000);
}

//hideLoading
function hideLoading() {
  wx.hideLoading()
}

// 打印
function log(res) {
  var data = res.data || res.errMsg || res;
  console.log('%c' + JSON.stringify(data), 'background: #222; color: #bada55');
}

// 日期格式化
function dateFormat(date, format = "YYYY-mm-dd") {
  if (!date) return
  let ret;
  date = new Date(date)
  const opt = {
    "Y+": date.getFullYear().toString(), // 年
    "m+": (date.getMonth() + 1).toString(), // 月
    "d+": date.getDate().toString(), // 日
    "H+": date.getHours().toString(), // 时
    "M+": date.getMinutes().toString(), // 分
    "S+": date.getSeconds().toString() // 秒
    // 有其他格式化字符需求可以继续添加，必须转化成字符串
  };
  for (let k in opt) {
    ret = new RegExp("(" + k + ")").exec(format);
    if (ret) {
      format = format.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
    };
  };
  return format;
}

function getOrderStatus(status) {
  var key = status + ''
  var statusObj = {
    '1': '创建待支付',
    '2': '订单取消',
    '3': '待提货',
    '4': '待揽收',
    '5': '已提货',
    '6': '已完成',
    '7': '交易关闭',
    '10': '售后申请',
    '11': '待退回',
    '12': '待返仓',
    '13': '待退款',
    '14': '售后失败',
    '15': '售后完成',
    '16': '售后失败', // 被驳回
    '17': '审核通过',
    '18': '售后待审核',
    '20': '待退款',
    '21': '已退款',
    '22': '退款失败',
  }
  return statusObj[key]
}

function pick(object, keys = []) {
  let newObj = {}
  for (const key in object) {
    const value = object[key]
    if (keys.includes(key)) {
      newObj[key] = value
    }
  }
  return newObj
}

//下载接口
function wxDownloadFile(url) {
  return new Promise((resolve, reject) => {
    showLoading();
    wx.downloadFile({
      url: url,
      success: res => {
        //解析用户信息获取UnionId
        if (res.statusCode == 200) {
          resolve(res.tempFilePath);
        } else {
          var errorMsg = res.errMsg;
          showToast(errorMsg);
          reject(res);
        }
        hideLoading();
      },
      fail: err => {
        hideLoading();
        showToast(err.errMsg);
        reject(err);
      }
    })
  });
}


/**
 * 
 * @param {CanvasContext} ctx canvas上下文
 * @param {number} x 圆角矩形选区的左上角 x坐标
 * @param {number} y 圆角矩形选区的左上角 y坐标
 * @param {number} w 圆角矩形选区的宽度
 * @param {number} h 圆角矩形选区的高度
 * @param {number} r 圆角的半径
 */
function roundRect(ctx, x, y, w, h, r, color) {
  // 开始绘制
  ctx.beginPath()
  // 因为边缘描边存在锯齿，最好指定使用 transparent 填充
  // 这里是使用 fill 还是 stroke都可以，二选一即可
  ctx.setFillStyle(color)
  // ctx.setStrokeStyle('transparent')
  // 左上角
  ctx.arc(x + r, y + r, r, Math.PI, Math.PI * 1.5)

  // border-top
  ctx.moveTo(x + r, y)
  ctx.lineTo(x + w - r, y)
  ctx.lineTo(x + w, y + r)
  // 右上角
  ctx.arc(x + w - r, y + r, r, Math.PI * 1.5, Math.PI * 2)

  // border-right
  ctx.lineTo(x + w, y + h - r)
  ctx.lineTo(x + w - r, y + h)
  // 右下角
  ctx.arc(x + w - r, y + h - r, r, 0, Math.PI * 0.5)

  // border-bottom
  ctx.lineTo(x + r, y + h)
  ctx.lineTo(x, y + h - r)
  // 左下角
  ctx.arc(x + r, y + h - r, r, Math.PI * 0.5, Math.PI)

  // border-left
  ctx.lineTo(x, y + r)
  ctx.lineTo(x + r, y)

  // 这里是使用 fill 还是 stroke都可以，二选一即可，但是需要与上面对应
  ctx.fill()
  // ctx.stroke()
  ctx.closePath()
  // 剪切
  ctx.clip()
}

/// 圆角矩形路径 
function roundRectPath(ctx, x, y, w, h, r) {
  ctx.beginPath();
  ctx.moveTo(x + r, y);
  ctx.arcTo(x + w, y, x + w, y + h, r);
  ctx.arcTo(x + w, y + h, x, y + h, r);
  ctx.arcTo(x, y + h, x, y, r);
  ctx.arcTo(x, y, x + w, y, r);
  ctx.closePath();
}

// jsonString
function jsonStringify(obj) {
  return encodeURIComponent(JSON.stringify(obj));
}

//jsonparse
function jsonParse(obj) {
  return JSON.parse(decodeURIComponent(obj));
}

// time小于10的格式化函数
function timeFormat(param) {
  return param < 10 ? '0' + param : param;
}

module.exports = {
  showModal,
  showToast,
  showActionSheet,
  showLoading,
  hideLoading,
  log,
  dateFormat,
  getOrderStatus,
  pick,
  wxDownloadFile,
  roundRect,
  roundRectPath,
  jsonStringify,
  jsonParse,
  timeFormat,
}
